package com.etc.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

@Slf4j
public class DateUtils {
    private static final Log logger = LogFactory.getLog(DateUtils.class);

    public static final String DATE_SHORT_FORMAT = "yyyyMMdd";
    public static final String DATE_CH_FORMAT = "yyyy年MM月dd日";

    public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss.S";
    public static final String DATE_FORMAT = "yyyy-MM-dd";
    public static final String DATE_MONTH_FORMAT = "yyyy-MM";
    public static final String TIME_FORMAT = "HH:mm:ss";

    public static final String DAYTIME_START = "00:00:00";
    public static final String DAYTIME_END = "23:59:59";

    private static final String[] FORMATS = {"yyyyMMdd","yyyy-MM-dd", "yyyy-MM-dd HH:mm",
            "yyyy-MM-dd HH:mm:ss", "HH:mm", "HH:mm:ss", "yyyy-MM",
            "yyyy-MM-dd HH:mm:ss.S"};

    private DateUtils() {

    }



//    时间戳转时间

    public static String formatDateString(String str) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_TIME_FORMAT);
         return  simpleDateFormat.format(new Date(Long.valueOf(str)));
    }

//    字符转时间戳
    public static long fromatString(String str) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_TIME_FORMAT);
        Date parse = simpleDateFormat.parse(str);
        return parse.getTime();
    }

//
//    public static Date getshijianchuo(){
//        return System.currentTimeMillis();
//    }


    /**
     * 字符串转换成日期 主要解决json传入日期问题
     */
    public static Date convert(String str) {
        if (str != null && str.length() > 0) {
            if (str.length() > 10 && str.charAt(10) == 'T') {
                str = str.replace('T', ' ');// 去掉json-lib加的T字母
            }
            for (String format : FORMATS) {
                if (format.length() == str.length()) {
                    try {
                        Date date = new SimpleDateFormat(format).parse(str);
                        return date;
                    } catch (ParseException e) {
                        if (logger.isWarnEnabled()) {
                            logger.warn(e.getMessage());
                        }
                    }
                }
            }
        }
        return null;
    }

//    /**
//     * 字符串、日期格式 转换日期
//     * @param format 例如: "yyyy-MM-dd HH:mm:ss"
//     * @param str 例如: "2012-12-03 23:21:24"
//     */
//    public static Date convert(String str, String format) {
//        if (!StringUtils.isEmpty(str)) {
//            try {
//                Date date = new SimpleDateFormat(format).parse(str);
//                return date;
//            } catch (ParseException e) {
//                if (logger.isWarnEnabled()) {
//                    logger.warn(e.getMessage());
//                }
//            }
//        }
//        return null;
//    }
//
//    /**
//     * 将日期转换成format字符串
//     * @param date 例如: Sun Jun 10 09:18:00 CST 2018
//     * @param dateFormat 例如: "yyyy-MM-dd HH:mm:ss"
//     */
//    public static String convert(Date date, String dateFormat) {
//        if (date == null) {
//            return null;
//        }
//        if (null == dateFormat) {
//            dateFormat = DATE_TIME_FORMAT;
//        }
//        return new SimpleDateFormat(dateFormat).format(date);
//    }
//
//    /**
//     * 根据传入的日期  转换成这样格式的字符串 如：“yyyy-MM-dd HH:mm:ss”
//     */
//    public static String convert(Date date) {
//        return convert(date, DATE_TIME_FORMAT);
//    }
//
//    /**
//     * 时间拼接 将日期和实现拼接 ymd 如2012-05-15 hm 如0812 最终 2012-05-15 08:12:00
//     */
//    public static Date concat(String ymd, String hm) {
//        if (!StringUtils.isBlank(ymd) && !StringUtils.isBlank(hm)) {
//            try {
//                String dateString = ymd.concat(" ").concat(hm.substring(0, 2)).concat(":").concat(hm.substring(2, 4)).concat(":00");
//                Date date = DateUtils.convert(dateString, DateUtils.DATE_TIME_FORMAT);
//                return date;
//            } catch (NullPointerException e) {
//                if (logger.isWarnEnabled()) {
//                    logger.warn(e.getMessage());
//                }
//            }
//        }
//        return null;
//    }
//
//    /**
//     * 根据传入的日期返回年月日的6位字符串，例：20101203
//     */
//    public static String getDay(Date date) {
//        return convert(date, DATE_SHORT_FORMAT);
//    }
//
//    /**
//     * 根据传入的日期返回中文年月日字符串，例：2010年12月03日
//     */
//    public static String getChDate(Date date) {
//        return convert(date, DATE_CH_FORMAT);
//    }
//
//    /**
//     * 返回该天从00:00:00开始的日期
//     */
//    public static Date getStartDatetime(Date date) {
//        String thisDate = convert(date, DATE_FORMAT);
//        return convert(thisDate + " " + DAYTIME_START);
//    }
//
//    /**
//     * 返回该天到23:59:59结束的日期
//     */
//    public static Date getEndDatetime(Date date) {
//        String thisDate = convert(date, DATE_FORMAT);
//        return convert(thisDate + " " + DAYTIME_END);
//    }
//
//
//
//
//    /**
//     * 将传入的时间格式的字符串转成时间对象      例如：传入2012-12-03 23:21:24
//     */
//    public static Date strToDate(String dateStr) {
//        SimpleDateFormat formatDate = new SimpleDateFormat(DATE_TIME_FORMAT);
//        Date date = null;
//        try {
//            date = formatDate.parse(dateStr);
//        } catch (Exception e) {
//
//        }
//        return date;
//    }
//
//    /**
//     * 返回该日期的最后一刻，精确到纳秒
//     */
//    public static Timestamp getLastEndDatetime(Date endTime) {
//        Timestamp ts = new Timestamp(endTime.getTime());
//        ts.setNanos(999999999);
//        return ts;
//    }
//
//    /**
//     * 返回该日期加1秒
//     */
//    public static Timestamp getEndTimeAdd(Date endTime) {
//        Timestamp ts = new Timestamp(endTime.getTime());
//        Calendar calendar = Calendar.getInstance();
//        calendar.setTime(ts);
//        calendar.add(Calendar.MILLISECOND, 1000);
//        calendar.set(Calendar.MILLISECOND, 0);
//        return new Timestamp(calendar.getTimeInMillis());
//    }
//
//    /**
//     * 返回该日期加 millisecond 毫秒，正数为加，负数为减
//     */
//    public static Timestamp getDateAdd(Date date, int millisecond) {
//        Timestamp ts = new Timestamp(date.getTime());
//        Calendar calendar = Calendar.getInstance();
//        calendar.setTime(ts);
//        calendar.add(Calendar.MILLISECOND, millisecond);
//        calendar.set(Calendar.MILLISECOND, 0);
//        return new Timestamp(calendar.getTimeInMillis());
//    }
}
